文章摘要 FakeGPT
加载中...|
概述
Agent 系统的评估与传统软件测试不同,输出具有不确定性和多样性。本文将介绍 Agent 评估的维度、工具和实践。
Agent 评估维度
核心评估维度
text
┌─────────────────────────────────────────────────────────┐
│ Agent 评估维度 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 准确性:回答是否正确,工具调用是否准确 │
│ 2. 相关性:是否回答了用户的问题 │
│ 3. 完整性:是否回答了所有部分 │
│ 4. 一致性:多次回答是否一致 │
│ 5. 有用性:是否真正解决了用户问题 │
│ 6. 效率:响应时间、Token 消耗 │
│ 7. 安全性:是否生成有害内容 │
│ 8. 鲁棒性:处理异常输入的能力 │
│ │
└─────────────────────────────────────────────────────────┘评估指标
| 指标 | 计算方法 | 目标值 |
|---|---|---|
| 任务成功率 | 成功数 / 总数 | >90% |
| 平均轮次 | 总轮次 / 总任务 | <5 |
| 平均响应时间 | 总时间 / 请求数 | <3秒 |
| 工具调用准确率 | 正确数 / 总数 | >95% |
评估框架
LangSmith
python
# pip install langsmith
from langsmith import Client
client = Client()
# 创建数据集
dataset = client.create_dataset(
name="agent-eval-dataset",
description="Agent 评估数据集"
)
# 添加示例
examples = [
{"input": {"query": "北京天气?"}, "output": {"success": True}},
]
client.create_examples(
dataset_id=dataset.id,
inputs=[e["input"] for e in examples],
outputs=[e["output"] for e in examples]
)RAGAS
python
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy
from datasets import Dataset
data = {
"question": ["什么是 RAG?"],
"answer": ["RAG 是检索增强生成..."],
"contexts": [["RAG 文档内容"]],
"ground_truth": ["RAG 定义..."]
}
dataset = Dataset.from_dict(data)
result = evaluate(
dataset=dataset,
metrics=[faithfulness, answer_relevancy]
)自动化评估
LLM-as-a-Judge
python
class LLMEvaluator:
"""使用 LLM 评估"""
def __init__(self, model="gpt-4o"):
self.model = ChatOpenAI(model=model)
def evaluate(self, question: str, response: str) -> dict:
prompt = f"""评估回答质量:
问题: {question}
回答: {response}
评分 1-10:准确性、完整性、清晰度、有用性
返回 JSON。"""
result = self.model.invoke(prompt)
return json.loads(result.content)基于规则的评估
python
class RuleBasedEvaluator:
"""基于规则的评估"""
def __init__(self):
self.rules = []
def add_rule(self, rule_func, name: str):
self.rules.append({"name": name, "func": rule_func})
def evaluate(self, question: str, response: str) -> dict:
results = {}
for rule in self.rules:
try:
passed, message = rule["func"](question, response)
results[rule["name"]] = {"passed": passed, "message": message}
except Exception as e:
results[rule["name"]] = {"passed": False, "message": str(e)}
passed = sum(1 for r in results.values() if r["passed"])
results["summary"] = {"passed": passed, "total": len(self.rules)}
return resultsA/B 测试
python
from dataclasses import dataclass
from typing import Callable, List
import time
@dataclass
class TestResult:
variant: str
success: bool
response_time: float
error: str = None
class AgentABTester:
"""Agent A/B 测试"""
def __init__(self, variant_a: Callable, variant_b: Callable):
self.variant_a = variant_a
self.variant_b = variant_b
def run_test(self, test_inputs: List[Dict]) -> Dict:
results_a = []
results_b = []
for i, inp in enumerate(test_inputs):
variant = self.variant_a if i % 2 == 0 else self.variant_b
result = self._execute(variant, inp)
if variant == self.variant_a:
results_a.append(result)
else:
results_b.append(result)
return self._analyze(results_a, results_b)
def _execute(self, variant: Callable, inp: Dict) -> TestResult:
try:
start = time.time()
response = variant(inp)
elapsed = time.time() - start
return TestResult(variant.__name__, True, elapsed)
except Exception as e:
return TestResult(variant.__name__, False, 0, str(e))小结
Agent 评估要点:
- 评估维度:准确性、相关性、完整性、一致性、有用性、效率
- 评估框架:LangSmith、RAGAS、Phoenix
- 自动化方法:LLM-as-a-Judge、规则评估
- A/B 测试:对比不同版本性能
- 持续监控:建立自动化测试流程
本系列文章到此结束,希望这些内容帮助你全面理解 LLM 和 Agent 技术!
赞赏博主
评论 隐私政策